﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Entidad;
public partial class CDABM : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack) //Solo la primera vez carga la grilla
        {
            CargarGrilla();
            Nuevo();
            cargarGeneros();
            cargarSellosDiscograficos();
            int id_cd = 0;
            if (int.TryParse(Request["id_cd"], out id_cd))
            {
                editarCD(id_cd);
            }
            ////con sesion bug, al entrar puede existir el id desde otra sesion y no carga en blanco sino q rellena.
            //if (Session["id_cd"] != null && int.TryParse(Session["id_cd"].ToString(), out id_cd))
            //{
            //    editarCD(id_cd);
            //}

            alertaCodigoCD.Visible = false;
            alerta.Visible = false;

            if (User.IsInRole("administrador"))
            {
                btnEliminar.Enabled = true;
                btnEliminar.Visible = true;
                btnSave.Visible = true;
                btnSave.Enabled = true;
                btnNuevo.Visible = true;
                btnNuevo.Enabled = true;

            }
            else
            {
                btnEliminar.Enabled = false;
                btnEliminar.Visible = false;
                btnSave.Visible = false;
                btnSave.Enabled = false;
                btnNuevo.Visible = false;
                btnNuevo.Enabled = false;

            }
        }
    }

    private void editarCD(int cdId)
    {
        EntidadCD cd = DAO.DAOCD.Buscar(cdId);
        Nuevo();
        if (cd != null)
        {
            txtTitulo.Text = cd.titulo;
            txtStock.Text = cd.stock.Value.ToString();
            txtPrecioVenta.Text = cd.precio_venta.ToString();
            txtCodigoCd.Text = cd.codigo_cd.Value.ToString();
            cboGeneros.SelectedValue = cd.id_genero.ToString();
            cboSelloDiscografico.SelectedValue = cd.id_sello_discografico.ToString();
            txtFechaReposicion.Text = cd.fecha_ultima_reposicion.Value.ToShortDateString();
            if (cd.fecha_publicacion.HasValue)
            {
                txtFechaPublicacion.Text = cd.fecha_publicacion.Value.ToShortDateString();
            }
            ViewState["id_cd"] = cd.id_cd;
            if (User.IsInRole("administrador"))
            {
                btnEliminar.Enabled = true;
                btnEliminar.Visible = true;
                btnSave.Visible = true;
                btnSave.Enabled = true;
                btnNuevo.Visible = true;
                btnNuevo.Enabled = true;

            }
            else
            {
                btnEliminar.Enabled = false;
                btnEliminar.Visible = false;
                btnSave.Visible = false;
                btnSave.Enabled = false;
                btnNuevo.Visible = false;
                btnNuevo.Enabled = false;

            }
        }
    }
    private void cargarGeneros()
    {
        cboGeneros.DataSource = DAO.DAOGenero.getTodas();
        cboGeneros.DataTextField = "nombre";
        cboGeneros.DataValueField = "id_genero";
        cboGeneros.DataBind();
        cboGeneros.Items.Insert(0, new ListItem("(Sin Seleccion)", ""));
        cboGeneros.SelectedIndex = 0;
    }
    private void cargarSellosDiscograficos()
    {
        cboSelloDiscografico.DataSource = DAO.DAOSelloDiscografico.getTodas();
        cboSelloDiscografico.DataTextField = "nombre";
        cboSelloDiscografico.DataValueField = "id_sello_discografico";
        cboSelloDiscografico.DataBind();
        cboSelloDiscografico.Items.Insert(0, new ListItem("(Sin Seleccion)", ""));

        cboSelloDiscografico.SelectedIndex = 0;
    }
    private void CargarGrilla()
    {
        gvCD.DataSource = DAO.DAOCD.getTodas();
        gvCD.DataKeyNames = new string[] { "id_cd" };
        gvCD.DataBind();
    }
    protected void btnNuevo_Click(object sender, EventArgs e)
    {
        Nuevo();
    }
    private void Nuevo()
    {
        cboSelloDiscografico.ClearSelection();
        cboSelloDiscografico.SelectedIndex = -1;
        cboGeneros.ClearSelection();
        cboGeneros.SelectedIndex = -1;
        txtCodigoCd.Text = string.Empty;
        txtFechaPublicacion.Text = string.Empty;
        txtFechaReposicion.Text = string.Empty;
        txtPrecioVenta.Text = string.Empty;
        txtStock.Text = string.Empty;
        txtTitulo.Text = string.Empty;
        btnEliminar.Enabled = false;
        ViewState["id_cd"] = null;
        alertaCodigoCD.Visible = false;
        alerta.Visible = false;
    }
    protected void btnAceptar_Click(object sender, EventArgs e)
    {
        if (!User.IsInRole("administrador"))
        {
            return;
        }

        if (ViewState["id_cd"] == null)
        {
            //es un alta
            int codigo_cd = int.Parse(txtCodigoCd.Text);
            if (!DAO.DAOCD.codigoCdEnUso(codigo_cd))
            {
                EntidadCD cd = new EntidadCD();
                cd.codigo_cd = int.Parse(txtCodigoCd.Text);
                if (!string.IsNullOrEmpty(txtFechaPublicacion.Text))
                {
                    cd.fecha_publicacion = DateTime.Parse(txtFechaPublicacion.Text);
                }
                cd.fecha_ultima_reposicion = DateTime.Parse(txtFechaReposicion.Text);
                cd.precio_venta = float.Parse(txtPrecioVenta.Text);
                cd.stock = int.Parse(txtStock.Text);
                cd.titulo = txtTitulo.Text;
                if (cboGeneros.SelectedIndex > 0)
                {
                    cd.id_genero = int.Parse(cboGeneros.SelectedValue);
                }
                if (cboSelloDiscografico.SelectedIndex > 0)
                {
                    cd.id_sello_discografico = int.Parse(cboSelloDiscografico.SelectedValue);
                }
                DAO.DAOCD.Guardar(cd);
                CargarGrilla();
                Nuevo();
            }
            else
            {
                alertaCodigoCD.Visible = true;
            }

        }
        else
        {
            //estoy modificando
            int codigo_cd = int.Parse(txtCodigoCd.Text);
            int cdId = int.Parse(ViewState["id_cd"].ToString());
            EntidadCD cd = DAO.DAOCD.Buscar(cdId);
            //si esto se cumple es que tenia el mismo codigo q antes
            if (cd.codigo_cd == codigo_cd || !DAO.DAOCD.codigoCdEnUso(codigo_cd))
            {
                if (cboGeneros.SelectedIndex > 0)
                {
                    cd.id_genero = int.Parse(cboGeneros.SelectedValue);
                }
                else
                {//ojo no puede ser null
                    cd.id_genero = null;
                }
                if (cboSelloDiscografico.SelectedIndex > 0)
                {
                    cd.id_sello_discografico = int.Parse(cboSelloDiscografico.SelectedValue);
                }
                else
                {//ojo no puede ser null
                    cd.id_sello_discografico = null;
                }
                cd.codigo_cd = int.Parse(txtCodigoCd.Text);
                if (!string.IsNullOrEmpty(txtFechaPublicacion.Text))
                {
                    cd.fecha_publicacion = DateTime.Parse(txtFechaPublicacion.Text);
                }
                cd.fecha_ultima_reposicion = DateTime.Parse(txtFechaReposicion.Text);
                cd.precio_venta = float.Parse(txtPrecioVenta.Text);
                cd.stock = int.Parse(txtStock.Text);
                cd.titulo = txtTitulo.Text;
                DAO.DAOCD.Actualizar(cd);
                CargarGrilla();
                Nuevo();
            }
            else
            {
                alertaCodigoCD.Visible = true;
            }
        }
    }
    protected void gvCD_SelectedIndexChanged(object sender, EventArgs e)
    {
        int cdId = (int)gvCD.SelectedDataKey.Value;
        editarCD(cdId);
    }
    protected void btnEliminar_Click(object sender, EventArgs e)
    {
        if (ViewState["id_cd"] != null)
        {
            int cdId = int.Parse(ViewState["id_cd"].ToString());
            if (DAO.DAODetalleFactura.cdEnUso(cdId))
            {
                alerta.Visible = true;
                alerta.InnerText = "Existen facturas usando este CD.No se podra eliminar el CD hasta que elimine las facturas.";
                return;
            }
            if(DAO.DAODetallePedido.cdEnUso(cdId)){
                alerta.Visible = true;
                alerta.InnerText = "Existen pedidos usando este CD.No se podra eliminar el CD hasta que elimine lss pedidos.";
                return;
                }
            else
            {
                Entidad.EntidadCD cd = new EntidadCD();
                cd.id_cd = cdId;
                DAO.DAOCD.Eliminar(cd);
                Nuevo();
                CargarGrilla();

            }
        }
    }
    protected void btnBuscar_Click(object sender, EventArgs e)
    {
        gvCD.DataSource = DAO.DAOCD.BuscarPorTitulo(txtBuscar.Text);
        gvCD.DataKeyNames = new string[] { "id_cd" };
        gvCD.DataBind();
    }
}